package cliente_admin;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Hashtable;
import java.util.Map;

import javax.swing.BorderFactory;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
import javax.swing.border.BevelBorder;
import javax.swing.border.LineBorder;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

import common.Mensaje;
import common.MensajeConsulta;

/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
public class AdminMain extends javax.swing.JFrame {



	private JLabel label1;
	//private JButton BotonConsulta5;
	//private JButton BotonConsulta6;
	private JPanel PanelBotonesConsulta;
	//private JButton BotonConsulta7;
	private JButton BotonConsulta4;
	private JButton BotonConsulta3;
	private JButton BotonConsulta1;
	private JPanel PanelConsulta;
	private JTabbedPane PanelPestanias;
	private JPanel PanelControl;
	private JScrollPane jScrollPane1;
	private JButton boton1;
	private JPanel panel1;
	private JLabel estado1;
	private JLabel estado2;
	
	private String actual="";
	private JTextField jt;
	private JButton Refresh;
	private JLabel jLabel2;
	private JLabel jLabel1;
	private JComboBox jComboBox1;
	private JLabel LabelFechas;
	private JComboBox DesplegableSesiones;
	private JTextArea AreaRtasConsultas;
	private JScrollPane ScrollRtasConsultas;

	private ClienteAdmin admin;
	private String[] arreglo_desplegable;
	private int contador;
	private boolean cerrando_sesion=false;
	
	private ModuloConsultas moduloConsultas;
	private Map<String,String> mapeoSesiones; //  <fecha, id>
	private Map<String,String> mapeoTemas;
	
	private boolean hubo_un_tema=false;
	private char[] pass_usr;
	
	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				AdminMain inst = new AdminMain();
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
				
			   /* JPanel message = new JPanel();
	            message.add(new JLabel("Label:"));              
	            message.add(new JTextField("ABCD"));
	            message.setBackground(Color.GREEN);
	            JOptionPane.showConfirmDialog(inst, message, "Default made dialog", JOptionPane.YES_NO_OPTION);
				*/
			}
		});
	}
	
	public AdminMain() {
		super();
		arreglo_desplegable= new String[]{
				Mensaje.TIPO_ERROR, 		// 0 
				Mensaje.TIPO_FIN_SESION,	// 1
				Mensaje.TIPO_HAY_QUORUM,	// 2
				Mensaje.TIPO_HAY_TEMA, 		// 3
				Mensaje.TIPO_HAY_VOTACION,	// 4
				Mensaje.TIPO_INICIO_SESION, // 5
				Mensaje.TIPO_INICIO_VOTACION,// 6
				Mensaje.TIPO_NO, 			// 7
				Mensaje.TIPO_OK, 			// 8
				Mensaje.TIPO_SALUDO, 		// 9
				Mensaje.TIPO_VOTO, 			// 10
				Mensaje.TIPO_INICIO_TEMA, 	// 11 
				Mensaje.TIPO_NUEVO_TEMA, 	// 12
				Mensaje.TIPO_CIERRE_SESION, // 13
				Mensaje.TIPO_HAY_RTDOS 		// 14
		}; // ahhhhhh!!!! por qu� que hiciste esto eliana!!!!!!!
		//admin=new ClienteAdmin(this); // SEPT2014
		contador=1;
		//mapeoSesiones=new Hashtable<String,String>();
		
		//llenarMapeoSesiones();
		//mapeoTemas=new Hashtable<String,String>();

		
		
		
		
		boolean logueado=pedirPassUsr();
		if(!logueado){
			System.exit(0);
		}else{
			//Log.append(admin.iniciar_conexion("123456".toCharArray(), "abcdefg".toCharArray())); // ac� se inicia conexi�n!!!!!!!!!!!!!!!!
			iniciarModuloConsultas();
			llenarMapeoSesiones();
			mapeoTemas=new Hashtable<String,String>();
			initGUI();
			
			
			//Log.append(admin.iniciar_conexion(pass_usr, pass_usr)); // ac� se inicia conexi�n!!!!!!!!!!!!!!!!
			admin.iniciar_conexion(pass_usr, pass_usr);
		}
	}
	
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			getContentPane().setLayout(null);
			getContentPane().setBackground(new java.awt.Color(255,255,255));
			{
				PanelPestanias = new JTabbedPane();
				getContentPane().add(PanelPestanias);
				PanelPestanias.setBounds(0, 0, 650, 650);
				PanelPestanias.setPreferredSize(new java.awt.Dimension(650, 650));
				PanelPestanias.setBackground(new java.awt.Color(255,255,255));
			}
			{
				PanelControl = new JPanel();
				PanelPestanias.addTab("Panel Control",PanelControl);
				PanelControl.setLayout(null);
				PanelControl.setPreferredSize(new java.awt.Dimension(650, 650));
				PanelControl.setSize(650, 650);
				PanelControl.setBackground(new java.awt.Color(255,255,255));
				PanelControl.setForeground(new java.awt.Color(72,61,139));
				PanelControl.setVisible(false);
			}
			{
				PanelConsulta = new JPanel();
				PanelPestanias.addTab("Consultas", null, PanelConsulta, null);
				PanelConsulta.setLayout(null);
				PanelConsulta.setBackground(new java.awt.Color(255,255,255));
				{//desplegable de las sesiones.......................
					ComboBoxModel DesplegableSesionesModel = 
							//new DefaultComboBoxModel(new String[] { "Item One", "Item Two" });
					new DefaultComboBoxModel(mapeoSesiones.keySet().toArray());
					DesplegableSesiones = new JComboBox();
					PanelConsulta.add(DesplegableSesiones);
					DesplegableSesiones.setModel(DesplegableSesionesModel);
					DesplegableSesiones.setBounds(251, 74, 139, 20);
					DesplegableSesiones.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent evt) {
							DesplegableSesionesActionPerformed(evt);
						}
					});
				}
				{
					PanelBotonesConsulta = new JPanel();
					FlowLayout PanelBotonesConsultaLayout = new FlowLayout();
					PanelBotonesConsultaLayout.setVgap(20);
					PanelBotonesConsulta.setLayout(PanelBotonesConsultaLayout);
					PanelConsulta.add(PanelBotonesConsulta);
					PanelBotonesConsulta.setBounds(195, 191, 251, 147);
					PanelBotonesConsulta.setBackground(new java.awt.Color(255,255,255));
					{
						BotonConsulta3 = new JButton();
						PanelBotonesConsulta.add(BotonConsulta3);
						BotonConsulta3.setText("Ver resultados");
						BotonConsulta3.setBounds(60, 171, 83, 23);
						BotonConsulta3.setPreferredSize(new java.awt.Dimension(203, 23));
						BotonConsulta3.setBackground(new java.awt.Color(72,61,139));
						BotonConsulta3.setForeground(new java.awt.Color(255,255,255));
						BotonConsulta3.addActionListener(new ActionListener() {
							public void actionPerformed(ActionEvent evt) {
								String fecha_sesion=(String)DesplegableSesiones.getSelectedItem();
								String id_sesion = mapeoSesiones.get(fecha_sesion);

								if(mapeoTemas.values().size()>0){ // si en la sesion seleccionada hay temas
				
									String tema= (String)jComboBox1.getSelectedItem();
									String idTema= mapeoTemas.get(tema);
			
									
									Object[] message={
											"Consulta de resultados de votaci�n",
											"\nTemas de la sesion del "+fecha_sesion+":",
											tema, "\n"
									};
									
									MensajeConsulta msj = new MensajeConsulta(MensajeConsulta.CONSULTA_RTDOS_VOTACION);
									msj.agregarParametro("idSesion", id_sesion);
									msj.agregarParametro("idTema", idTema);
									efectuarConsulta(msj);
								
								}else{
									JOptionPane.showMessageDialog(getContentPane(),"La sesion no contiene temas","Consulta Votaci�n", 1);
								}
							}
						});
					}
					{
						BotonConsulta4 = new JButton();
						PanelBotonesConsulta.add(BotonConsulta4);
						BotonConsulta4.setText("Ver detalle");
						BotonConsulta4.setBounds(60, 220, 83, 23);
						BotonConsulta4.setPreferredSize(new java.awt.Dimension(203, 23));
						BotonConsulta4.setBackground(new java.awt.Color(72,61,139));
						BotonConsulta4.setForeground(new java.awt.Color(255,255,255));
						BotonConsulta4.addActionListener(new ActionListener() {
							public void actionPerformed(ActionEvent evt) {
								
								String fecha_sesion=(String)DesplegableSesiones.getSelectedItem();
								String id_sesion = mapeoSesiones.get(fecha_sesion);
																
								if(mapeoTemas.values().size()>0){ // si en la sesion seleccionada hay temas
								
									String tema= (String)jComboBox1.getSelectedItem();
									String idTema= mapeoTemas.get(tema);
			
									 
									Object[] message={
											"Consulta detalles de la votaci�n",
											"\nTemas de la sesion del "+fecha_sesion+":",
											tema, "\n"
									};
									
							    	MensajeConsulta msj = new MensajeConsulta(MensajeConsulta.CONSULTA_VOTOS_CLIENTE);
									msj.agregarParametro("idSesion", id_sesion);
									msj.agregarParametro("idTema", idTema);
									efectuarConsulta(msj);
									
									
								
								}else{
									JOptionPane.showMessageDialog(getContentPane(),"La sesion no contiene temas","Consulta Votaci�n", 1);
								}
							}
						});
					}
					{
						BotonConsulta1 = new JButton();
						PanelBotonesConsulta.add(BotonConsulta1);
						BotonConsulta1.setText("Ver clientes en la sesion");
						BotonConsulta1.setBounds(60, 67, 83, 23);
						BotonConsulta1.setPreferredSize(new java.awt.Dimension(204, 23));
						BotonConsulta1.setBackground(new java.awt.Color(72,61,139));
						BotonConsulta1.setForeground(new java.awt.Color(255,255,255));
						BotonConsulta1.addActionListener(new ActionListener() {
							public void actionPerformed(ActionEvent evt) {
								String fecha_sesion=(String)DesplegableSesiones.getSelectedItem();
								Object[] message={"Se consultar� por los clientes presentes en la sesi�n del "+fecha_sesion};
								
								int option = JOptionPane.showConfirmDialog(getContentPane(), message, "Consulta clientes por sesi�n", JOptionPane.OK_CANCEL_OPTION);
								if(option==JOptionPane.OK_OPTION){
									MensajeConsulta msj = new MensajeConsulta(MensajeConsulta.CONSULTA_CLIENTES_DE_SESION);
									
									String id_sesion = mapeoSesiones.get(fecha_sesion);
									//String id_sesion = "38";
									System.out.println(id_sesion);
									msj.agregarParametro("idSesion", id_sesion);
									efectuarConsulta(msj);
								}
							}
						});
					}
					
				}
				{
					ScrollRtasConsultas = new JScrollPane();
					PanelConsulta.add(ScrollRtasConsultas);
					ScrollRtasConsultas.setBounds(48, 372, 552, 212);
					{
						AreaRtasConsultas = new JTextArea();
						ScrollRtasConsultas.setViewportView(AreaRtasConsultas);
					}
				}
				{
					LabelFechas = new JLabel();
					PanelConsulta.add(LabelFechas);
					LabelFechas.setText("Seleccione una sesi�n");
					LabelFechas.setBounds(12, 57, 621, 14);
					LabelFechas.setHorizontalAlignment( SwingConstants.CENTER );
				}
				{
					//desplegable de los temas.............
					
					//agregado eli............................
					String fecha_sesion=(String)DesplegableSesiones.getSelectedItem();
					if(fecha_sesion!=null)
					{
					String id_sesion = mapeoSesiones.get(fecha_sesion);
					mapeoTemas=llenarMapeoTemas(id_sesion);
					}
					//.............................................
					
					ComboBoxModel jComboBox1Model = 
							//new DefaultComboBoxModel(	new String[] { "Item One", "Item Two" });
					
							new DefaultComboBoxModel(mapeoTemas.keySet().toArray());		
					jComboBox1 = new JComboBox();
					PanelConsulta.add(jComboBox1);
					jComboBox1.setModel(jComboBox1Model);
					jComboBox1.setBounds(251, 118, 139, 20);
					jComboBox1.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent evt) {
							jComboBox1ActionPerformed(evt);
						}
					});
				}
				
			
				
				{
					jLabel1 = new JLabel();
					PanelConsulta.add(jLabel1);
					jLabel1.setText("Seleccione un tema");
					jLabel1.setBounds(12, 101, 621, 14);
					jLabel1.setHorizontalAlignment( SwingConstants.CENTER );
				}
			}
			{
				jLabel2 = new JLabel();
				PanelConsulta.add(jLabel2);
				jLabel2.setText("Seleccione una sesi�n y un tema para consultar sus datos");
				jLabel2.setBounds(12, 7, 621, 14);
				jLabel2.setHorizontalAlignment( SwingConstants.CENTER );
				jLabel2.setForeground(new java.awt.Color(72,61,139));
				jLabel2.setBackground(new java.awt.Color(255,255,255));
				jLabel2.setFont(new java.awt.Font("Segoe UI",0,14));
			}
			{
				label1 = new JLabel();
				PanelControl.add(label1);
				label1.setText("Asamblea universitaria");
				label1.setBounds(10, 29, 625, 16);
				label1.setHorizontalAlignment( SwingConstants.CENTER );
				label1.setFont(new java.awt.Font("Tahoma",1,12));
				label1.setForeground(new java.awt.Color(72,61,139));
			}
			{
				estado2 = new JLabel();
				PanelControl.add(estado2);
				estado2.setBounds(43, 97, 556, 109);
				estado2.setHorizontalAlignment( SwingConstants.CENTER );
				estado2.setBackground(new java.awt.Color(162,153,210));
				estado2.setBorder(BorderFactory.createEtchedBorder(BevelBorder.LOWERED));
				estado2.setForeground(new java.awt.Color(72,61,139));
			}
			{
				estado1 = new JLabel();
				PanelControl.add(estado1);
				estado1.setText("Bienvenidos!");
				estado1.setBounds(10, 56, 625, 29);
				estado1.setHorizontalAlignment( SwingConstants.CENTER );
				estado1.setFont(new java.awt.Font("Tahoma",0,22));
			}
			{
				panel1 = new JPanel();
				PanelControl.add(panel1);
				panel1.setBounds(43, 212, 556, 291);
				panel1.setLayout(null);
				panel1.setBackground(new java.awt.Color(255,255,255));
				{
					boton1 = new JButton();
					panel1.add(boton1);
					boton1.setText("Iniciar sesi�n");
					boton1.setBounds(209, 34, 140, 23);
					boton1.setBackground(new java.awt.Color(72,61,139));
					boton1.setForeground(new java.awt.Color(255,255,255));
					boton1.setFont(new java.awt.Font("Tahoma",1,11));
					boton1.addActionListener(new ActionListener() {
						public void actionPerformed(ActionEvent evt) {
							boton1ActionPerformed(evt);
						}
					});
				}
			}
			{
				Refresh = new JButton();
				PanelConsulta.add(Refresh);
				Refresh.setText("Refresh");
				Refresh.setBounds(509, 5, 119, 23);
				Refresh.setBackground(new java.awt.Color(72,61,139));
				Refresh.setForeground(new java.awt.Color(255,255,255));
				Refresh.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						RefreshActionPerformed(evt);
					}
				});
			}
			estado2.setVisible(false);
			

			ImageIcon iicon = new ImageIcon("C:/Users/eli/Desktop/icono.png"); // ??????????????????
			this.setIconImage(iicon.getImage());
			this.setTitle("Asamblea Universitaria - Administrador");
			
			
			
			pack();
			this.setSize(667, 690);
			
			 
		} catch (Exception e) {
		    //add your error handling code here
			e.printStackTrace();
		}
	}
	
//-------------------------------Boton INICIAR SESION-------------------------------------------------------------
	private void boton1ActionPerformed(ActionEvent evt) {
		//System.out.println("boton1.actionPerformed, event="+evt);
		
		
		panel1.remove(boton1);
		panel1.repaint();
		
		Runnable runrun = new Runnable(){
			public void run(){
				// env�o de msj
				Mensaje msj=new Mensaje();
				//msj.setTipo_msj(arreglo_desplegable[5]); // TIPO_INICIO_SESION	//enviar un msj tipo "INICIO SESION"
				msj.setTipo_msj(Mensaje.TIPO_INICIO_SESION); // TIPO_INICIO_SESION	//enviar un msj tipo "INICIO SESION"
				msj.setContenido("");
				
				admin.enviar_msj(msj);
				
				// recepci�n de rta
				Mensaje rta = admin.recibir_msj();
				//if(rta.getTipo_msj().equals("OK")) // # no de deberia ser TIPO_OK?????
				if(rta.getTipo_msj().equals(Mensaje.TIPO_OK)) // # no de deberia ser TIPO_OK?????
					{
						estado1.setText("Sesion abierta");
						estado2.setVisible(true);
						estado2.setText("Verificaci�n de quorum (15 minutos desde el inicio de la sesi�n)...");
						enviarMsjHayQuorum();
					}
				else{
					estado1.setText("no se puede iniciar una sesion");
					//ESTO NUNCA PASARIA POR COMO ESTA ARMADA LA GUI!
				}
				System.out.println(rta.getTipo_msj());
			
			}
		};
		Thread t= new Thread(runrun);
		admin.setThread_invocante_actual(t);
		t.start();
		
		contador++;
	}

//-------------------------------Boton CERRAR SESION---------------------------------------------------------------	
		private void cerrar_sesion_ActionPerformed(ActionEvent evt) {
			
			estado1.setText("Tema actual: cierre de sesi�n.");
			estado2.setVisible(false);
			PanelControl.remove(panel1);
			repaint();

			cerrar_sesion();
		}
		

//------------------------------Boton INICIAR DEBATE---------------------------------------------------------------
		private void iniciar_debate_ActionPerformed(ActionEvent evt) {
			
			String tema= jt.getText();
			estado1.setText("Tema actual: "+tema);
			estado2.setText("En debate");
			PanelControl.remove(panel1);
			
			repaint();
		
			panel1 = new JPanel();
			PanelControl.add(panel1);
			panel1.setBounds(43, 212, 556, 291);
			panel1.setBackground(new java.awt.Color(255,255,255));
			panel1.setLayout(null);
		
			{
				JButton boton = new JButton();
				panel1.add(boton);
				boton.setText("Iniciar Votacion");
				boton.setBounds(190, 34, 166, 23);
				boton.setBackground(new java.awt.Color(72,61,139));
				boton.setForeground(new java.awt.Color(255,255,255));
				boton.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						iniciar_votacion_ActionPerformed(evt);
					}


				});
				/*JButton boton3 = new JButton();
				panel1.add(boton3);
				boton3.setText("Cerrar sesion");
				boton3.setBounds(399, 154, 141, 23);
				boton3.setBackground(new java.awt.Color(72,61,139));
				boton3.setForeground(new java.awt.Color(255,255,255));
				boton3.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent evt) {
						cerrar_sesion_ActionPerformed(evt);
					}

				});*/
			}
			repaint();
		}	
		
//---------------------------------Boton INICIAR VOTACION (INICIAR TEMA!)--------------------------------------------------
		private void iniciar_votacion_ActionPerformed(ActionEvent evt) {
		
			iniciarVotacion();

		}	

//--------------iniciar votacion---------------------------------------------
		private void iniciarVotacion(){
			
			hubo_un_tema=true; //ACA??????????????????????????????????????????????????????
			
			Runnable runrun = new Runnable(){
				public void run(){
					// env�o de msj
					String tema= jt.getText();
					Mensaje msj=new Mensaje();
					//msj.setTipo_msj(arreglo_desplegable[11]); 	//enviar un msj tipo "TIPO_INICIO_TEMA"
					msj.setTipo_msj(Mensaje.TIPO_INICIO_TEMA); 	//enviar un msj tipo "TIPO_INICIO_TEMA"
					
					if(cerrando_sesion)
						tema="Cierre de sesion";
					
					msj.setContenido(tema);
					
					admin.enviar_msj(msj);
					
					// recepci�n de rta
					
					Mensaje rta = admin.recibir_msj();
					//if(rta.getTipo_msj().equals("OK"))
					if(rta.getTipo_msj().equals(Mensaje.TIPO_OK))
						{
							PanelControl.remove(panel1);
							estado2.setVisible(true);
							estado2.setText("Verificaci�n quorum previa a la votaci�n..."); 
							
							
							repaint();
							
							consultar_hay_votacion();
						}
					else{
						//NI IDEA
					}
					System.out.println(rta.getTipo_msj());
				
				}
			};
			Thread t2=new Thread(runrun);
			admin.setThread_invocante_actual(t2);
			t2.start();
			
			contador++;
			
		}
		
//-----------------------------Enviar msj que hay quirum y recibir la rta-----------------------------------------
		
	private void enviarMsjHayQuorum(){
		
		Runnable runrun = new Runnable(){
			public void run(){
				// env�o de msj
				Mensaje msj=new Mensaje();
				//msj.setTipo_msj(arreglo_desplegable[2]); // TIPO_HAY_QUORUM	//enviar un msj tipo "HAY QUORUM"
				msj.setTipo_msj(Mensaje.TIPO_HAY_QUORUM); // TIPO_HAY_QUORUM	//enviar un msj tipo "HAY QUORUM"
				msj.setContenido("");
				
				admin.enviar_msj(msj);
				
				// recepci�n de rta
				Mensaje rta = admin.recibir_msj();
				//if(rta.getTipo_msj().equals("SI")){
				if(rta.getTipo_msj().equals(Mensaje.TIPO_SI)){
						quorum_suficiente();
					}
				else{
						quorum_insuficiente(); //IMPLEMENTAR!!!!!!!
				}
				System.out.println(rta.getTipo_msj());
			
			}
		};
		Thread t5=new Thread(runrun);
		admin.setThread_invocante_actual(t5);
		t5.start();
		
		contador++;
		
	}
//-----------------------------Rta afirmativa de que hay quorum---------------------------------------------------
	private void quorum_suficiente(){
		estado2.setVisible(false);

		jt = new JTextField();
		panel1.add(jt);
		jt.setText("Ingresar tema");
		jt.setBounds(15, 34, 152, 23);
		jt.setBorder(new LineBorder(new java.awt.Color(171,173,179), 1, false));
		jt.setBackground(new java.awt.Color(255,255,255));
		jt.setForeground(new java.awt.Color(0,0,0));
		jt.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				iniciar_debate_ActionPerformed(evt);
			}

		});
		
		JButton boton2 = new JButton();
		panel1.add(boton2);
		boton2.setText("Iniciar debate");
		boton2.setBounds(15, 64, 152, 23);
		boton2.setBackground(new java.awt.Color(72,61,139));
		boton2.setForeground(new java.awt.Color(255,255,255));
		boton2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				iniciar_debate_ActionPerformed(evt);
			}
		});
		JButton boton3 = new JButton();
		panel1.add(boton3);
		boton3.setText("Cerrar sesion");
		boton3.setBounds(399, 64, 152, 23);
		boton3.setBackground(new java.awt.Color(72,61,139));
		boton3.setForeground(new java.awt.Color(255,255,255));
		boton3.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				cerrar_sesion_ActionPerformed(evt);
			}
		});

		panel1.repaint();
	
	}

	//-----------------------------Nuevo tema, es parcido a cdo hay una rta afirmativa a HAY QUORUM---------------------------------------------------
		private void nuevo_tema(){
			estado2.setVisible(false);
			

			PanelControl.remove(panel1);
			repaint();
			
			panel1= new JPanel();
			PanelControl.add(panel1);

			panel1.setBounds(43, 212, 556, 291);
			panel1.setLayout(null);
			panel1.setBackground(new java.awt.Color(255,255,255));

			jt = new JTextField();
			panel1.add(jt);
			jt.setText("Ingresar tema");
			jt.setBounds(15, 34, 152, 23);
			jt.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					iniciar_debate_ActionPerformed(evt);
				}

			});
			
			JButton boton2 = new JButton();
			panel1.add(boton2);
			boton2.setText("Iniciar debate");
			boton2.setBounds(15, 64, 152, 23);
			boton2.setBackground(new java.awt.Color(72,61,139));
			boton2.setForeground(new java.awt.Color(255,255,255));
			boton2.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					iniciar_debate_ActionPerformed(evt);
				}
			});
		/*	JButton boton3 = new JButton();
			panel1.add(boton3);
			boton3.setText("Cerrar sesion");
			boton3.setBounds(399, 64, 152, 23);
			boton3.setBackground(new java.awt.Color(72,61,139));
			boton3.setForeground(new java.awt.Color(255,255,255));
			boton3.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					cerrar_sesion_ActionPerformed2(evt);
				}
			});*/

			panel1.repaint();
		
		}	
//-------------------RTA NEGATIVA A HAY QUORUM-----------------------------------------
private void quorum_insuficiente(){
	
	//JOptionPane.showConfirmDialog(PanelControl, "PanelControl");
	JOptionPane.showMessageDialog(PanelControl, "No hay suficiente quorum no es posible dar inicio a la sesi�n");
	//boton1.setEnabled(false);
	estado2.setText("Quorum insuficiente");
}

//-------------------TERMINO LA VOTACION---------------------------------------------------

private void votacion_lista(String resultados){
	
	//	no se hace analisis de resultados. eso seguira siendo manual
	
	if(cerrando_sesion)
	{
		
		
			estado2.setText("<html>Resultados con respecto al cierre de sesi�n:<br><p align=\"center\">"+resultados+"</p><br><br>* Si se acord� cerrar la sesi�n por favor presione el boton \"Aprobar cierre sesion\" <br>* En caso contrario seleccione \"Nuevo tema\".</html>");	
			//mandar_msj_de_cierre_de_sesion();
			
			panel1 = new JPanel();
			PanelControl.add(panel1);
			panel1.setBackground(new java.awt.Color(255,255,255));
			panel1.setBounds(43, 212, 556, 291);
			panel1.setLayout(null);
			{
				JButton boton = new JButton();
				panel1.add(boton);
				boton.setText("Nuevo tema");
				boton.setBounds(194, 34, 163, 23);
				boton.setBackground(new java.awt.Color(72,61,139));
				boton.setForeground(new java.awt.Color(255,255,255));
				boton.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					nuevo_tema_ActionPerformed(evt);
				}
		
		
			});
			JButton boton2 = new JButton();
			panel1.add(boton2);
			boton2.setText("Aprobar cierre sesion");
			boton2.setBounds(194, 70, 163, 23);
			boton2.setBackground(new java.awt.Color(72,61,139));
			boton2.setForeground(new java.awt.Color(255,255,255));
			boton2.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					aceptar_el_cierre_de_sesion(evt);
				}

				private void aceptar_el_cierre_de_sesion(ActionEvent evt) {
					// TODO Auto-generated method stub
					
					//getContentPane().remove(panel1);
					//repaint();
					
					//estado2.setVisible(true);
					//estado2.setText("Cierre de sesi�n aceptado");
					mandar_msj_de_cierre_de_sesion();
				}
		
			});
			}
			
			
			
		
	}
	else
	{
		
		estado2.setText("Resultados: "+resultados);	
		
		panel1 = new JPanel();
		PanelControl.add(panel1);
		panel1.setBounds(43, 212, 556, 291);
		panel1.setBackground(new java.awt.Color(255,255,255));
		panel1.setLayout(null);
		{
			JButton boton = new JButton();
			panel1.add(boton);
			boton.setText("Nuevo tema");
			boton.setBounds(194, 34, 163, 23);
			boton.setBackground(new java.awt.Color(72,61,139));
			boton.setForeground(new java.awt.Color(255,255,255));
			boton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				nuevo_tema_ActionPerformed(evt);
			}
	
	
		});
		JButton boton2 = new JButton();
		panel1.add(boton2);
		boton2.setText("Cerrar sesion");
		boton2.setBounds(194, 70, 163, 23);
		boton2.setBackground(new java.awt.Color(72,61,139));
		boton2.setForeground(new java.awt.Color(255,255,255));
		boton2.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				cerrar_sesion_ActionPerformed(evt);
			}
	
		});
		}
	}
}

//------------------------iniciar un nuevo tema dentro de la sesion------------------------------

private void nuevo_tema_ActionPerformed(ActionEvent evt) {
	
	if(cerrando_sesion)
	{
		cerrando_sesion=false;
		//CIUDADO!!
		//SI ESTABA CERRANDO SESION Y ELEGI NUEVO TEMA ES PORQUE NO SE APROBO EL CIERRE
		//ASIQUE HAY QUE ANULARLO!!!
	}
	
	
	estado1.setText("Aguardando nuevo tema");
	
	Runnable runrun = new Runnable(){
		public void run(){
			// env�o de msj
			Mensaje msj=new Mensaje();
			//msj.setTipo_msj(arreglo_desplegable[12]); 	//enviar un msj tipo "INICIAR UN NEUVO TEMA"
			msj.setTipo_msj(Mensaje.TIPO_NUEVO_TEMA);
			msj.setContenido("");
			
			admin.enviar_msj(msj);
			
			// recepci�n de rta
			Mensaje rta = admin.recibir_msj();
			//if(rta.getTipo_msj().equals("OK"))
			if(rta.getTipo_msj().equals(Mensaje.TIPO_OK))
				{
				//pasaria lo mismo que pasa luego de un control de quorum inicial exitoso
				//asi que se reutiliza el metodo quorum_suficiente()
				//quorum_suficiente();
				
				nuevo_tema();
				}
			else{
				//nose
				//....................................ACA...................................................................................========

				metodo_error();
				System.out.println("3");
			}
			System.out.println(rta.getTipo_msj());

		}
	};
	Thread t6=new Thread(runrun);
	admin.setThread_invocante_actual(t6);
	t6.start();
	
	contador++;
	
	
	
	
}

private void metodo_error(){
	JOptionPane.showMessageDialog(PanelControl, "Se detecto un error en el servidor. Por favor contacte al administrador");
}
	
//------------------------consultar si hay votacion----------------------------------------------

private void consultar_hay_votacion(){
	
	Runnable runrun = new Runnable(){
		public void run(){
			// env�o de msj
			Mensaje msj=new Mensaje();
			//msj.setTipo_msj(arreglo_desplegable[4]); 	//enviar un msj tipo "HAY VOTACION"
			msj.setTipo_msj(Mensaje.TIPO_HAY_VOTACION); 	//enviar un msj tipo "HAY VOTACION"
			msj.setContenido("");
			
			admin.enviar_msj(msj);
			
			// recepci�n de rta
			Mensaje rta = admin.recibir_msj();
			//if(rta.getTipo_msj().equals("SI"))
			if(rta.getTipo_msj().equals(Mensaje.TIPO_SI))
				{
					estado2.setText("En votaci�n");				
					consultar_por_los_resultados();
				}
			//else if(rta.getTipo_msj().equals("NO")){
			else if(rta.getTipo_msj().equals(Mensaje.TIPO_NO)){
				//VER SI PONER SLEEP O NO
				//VER SI SINCRONIZA BIEN
				//----------------------------------------------------------------------------------------------------========== SLEEP?
				pausa();
				consultar_hay_votacion();
			}
			else if(rta.getTipo_msj().equals(Mensaje.TIPO_NO_HAY_QUORUM)){
			  		mandar_msj_de_cierre_de_sesion();
			  		estado2.setText("No hay quorum, se cerr� la sesi�n.");
			  		PanelControl.remove(panel1);
					repaint();
			 }
			
						
			System.out.println(rta.getTipo_msj());
		
		}
	};
	Thread t7=new Thread(runrun);
	admin.setThread_invocante_actual(t7);
	t7.start();
	
	contador++;
	
}
	
//---------------consultar los resultados------------------------------------------

private void consultar_por_los_resultados(){
	
	Runnable runrun = new Runnable(){
		public void run(){
			// env�o de msj
			Mensaje msj=new Mensaje();
			//msj.setTipo_msj(arreglo_desplegable[14]); 	//enviar un msj tipo "HAY resultados"
			msj.setTipo_msj(Mensaje.TIPO_HAY_RTDOS);
			msj.setContenido("");
			
			admin.enviar_msj(msj);
			
			// recepci�n de rta
			Mensaje rta = admin.recibir_msj();
			//if(rta.getTipo_msj().equals("SI")){
			if(rta.getTipo_msj().equals(Mensaje.TIPO_SI)){
				votacion_lista(rta.getContenido());
				}
			else{
				//VER SI PONER SLEEP O NO
				//VER SI SINCRONIZA BIEN
				//--------------------------------------------------------------------------------------------------------======= sleep?
				pausa();
				consultar_por_los_resultados();
			}
			System.out.println(rta.getTipo_msj());

		}
	};
	Thread t8=new Thread(runrun);
	admin.setThread_invocante_actual(t8);
	t8.start();
	
	contador++;
}


//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//en realidad el cerrar sesion debe hacer esto

	private void cerrar_sesion(){

		cerrando_sesion=true;
		
		//avisar al servidor que hay un nuevo tema
		//podria pasar que el cierre de sesion sea EL PRIMER TEMA
		//FALTA CONSIDERAR ESE CASO................................................................................=====
		
		if(hubo_un_tema){
			Runnable runrun = new Runnable(){
				public void run(){
					// env�o de msj
					Mensaje msj=new Mensaje();
					//msj.setTipo_msj(arreglo_desplegable[12]); 	//enviar un msj tipo "INICIAR UN NEUVO TEMA"
					msj.setTipo_msj(Mensaje.TIPO_NUEVO_TEMA); 	//enviar un msj tipo "INICIAR UN NEUVO TEMA"
					msj.setContenido("");
					
					admin.enviar_msj(msj);
					
					// recepci�n de rta
					Mensaje rta = admin.recibir_msj();
					//if(rta.getTipo_msj().equals("OK")){
					if(rta.getTipo_msj().equals(Mensaje.TIPO_OK)){
							//cerrar_sesion2();
						
						//puse un sleep porque sino el cliente se perdia....revisar!!!!!------------------------------------------------------------=======IMPORTANTE REVISAR
					/*	try {
							Thread.sleep(30000);
						} catch (InterruptedException e) {
						}*/
						
							iniciarVotacion();
						
					}else{
						//nose
						//....................................ACA...................................................................................========
						//**MSJ_ERROR**
						metodo_error();
						System.out.println("1");	//ACA!!!!!!!!
					}
					System.out.println(rta.getTipo_msj());
				}
			};
			Thread t9=new Thread(runrun);
			admin.setThread_invocante_actual(t9);
			t9.start();
			//
		}else iniciarVotacion();
		
	}
		
	private void cerrar_sesion2()	
	{	
		
		Runnable runrun = new Runnable(){
			public void run(){
				// env�o de msj
				Mensaje msj=new Mensaje();
				msj.setTipo_msj(arreglo_desplegable[11]); 	//enviar un msj tipo "TIPO_INICIO_TEMA"
				msj.setContenido("cierre de sesion");
				cerrando_sesion=true;
				
				admin.enviar_msj(msj);
				
				// recepci�n de rta
				Mensaje rta = admin.recibir_msj();
				if(rta.getTipo_msj().equals("OK"))
					{
						//getContentPane().remove(panel1);
						//getContentPane().remove(panel1);
						PanelControl.remove(panel1);
						repaint();
						
						estado2.setVisible(true);
						estado2.setText("Verificaci�n quorum previa a la votaci�n...");
						
						repaint();
						consultar_hay_votacion();
					}
				else{
					//NI IDEA
				}
				System.out.println(rta.getTipo_msj());
			}
		};
		Thread t3=new Thread(runrun);
		admin.setThread_invocante_actual(t3);
		t3.start();
		
		contador++;
	}

private void mandar_msj_de_cierre_de_sesion(){
	
	Runnable runrun = new Runnable(){
		public void run(){
			// env�o de msj
			Mensaje msj=new Mensaje();
			//msj.setTipo_msj(arreglo_desplegable[13]); 	//enviar un msj tipo "CIERRE SESION"
			msj.setTipo_msj(Mensaje.TIPO_CIERRE_SESION);
			msj.setContenido("");
			
			admin.enviar_msj(msj);
			
			// recepci�n de rta
			Mensaje rta = admin.recibir_msj();
			//if(rta.getTipo_msj().equals("OK")){
			if(rta.getTipo_msj().equals(Mensaje.TIPO_OK)){
					estado2.setVisible(true);
					estado2.setText("Cierre de sesi�n aceptado");
					PanelControl.remove(panel1);
					repaint();
				}
			else{
					//**MSJ_ERROR**
				metodo_error();
				System.out.println("2");
			}
			System.out.println(rta.getTipo_msj());
		
		}
	};
	Thread t4=new Thread(runrun);
	admin.setThread_invocante_actual(t4);
	t4.start();
	
	contador++;
}


//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

	private void pausa(){
		try {
			Thread.sleep(750);
		} catch (InterruptedException e) {
		}
	}
	
	private void iniciarModuloConsultas(){
		//moduloConsultas = new ModuloConsultas("123456".toCharArray(), "abcdefg".toCharArray());
		moduloConsultas = new ModuloConsultas(pass_usr, pass_usr);
	}
	
	private void efectuarConsulta(final MensajeConsulta consulta){
		for(Component c: PanelBotonesConsulta.getComponents()){
			c.setEnabled(false);
		}
		
		Runnable run = new Runnable(){
			public void run(){
				AreaRtasConsultas.setText("Esperando respuesta del servidor...");
				
				moduloConsultas.enviarConsulta(consulta);
				Document rtaConsulta=moduloConsultas.recibirRespuesta();
				
				StringBuffer buffer=new StringBuffer();
				
				Element nodos=rtaConsulta.getDocumentElement();
				
				NodeList entradas = nodos.getElementsByTagName("entrada");
				
				// colocar nbres de columnas
				if(entradas.getLength()>0){
					{
						NodeList campos = entradas.item(0).getChildNodes();
						
						for(int k=0; k<campos.getLength(); k++){
							Element campo = (Element) campos.item(k);
							buffer.append(campo.getNodeName().toUpperCase()+"\t\t");
						}
					}
					buffer.append("\n");
					// colocar entradas
					for(int i=0; i<entradas.getLength(); i++){
						
						NodeList campos = entradas.item(i).getChildNodes();
						
						for(int j=0; j<campos.getLength(); j++){
							Element campo = (Element) campos.item(j);
							buffer.append(campo.getTextContent()+"\t\t");
						}
						buffer.append("\n");
					}
				}else{
					buffer.append("La consulta no devolv�o resultados");
				}
				
				AreaRtasConsultas.setText("");
				
				AreaRtasConsultas.append("\n"+buffer.toString());
				for(Component c: PanelBotonesConsulta.getComponents()){
					c.setEnabled(true);
				}
			};
		};
		
		Thread threadConsulta = new Thread(run);
		threadConsulta.start();
	}

	public void dispose(){
		super.dispose();
		//moduloConsultas.enviarConsulta("TERMINAR");
		moduloConsultas.cerrar();
	}
	
	private void llenarMapeoSesiones(){
		mapeoSesiones=new Hashtable<String,String>();
		MensajeConsulta consulta = new MensajeConsulta(MensajeConsulta.CONSULTA_SESIONES);
		
		moduloConsultas.enviarConsulta(consulta);
		Document rtaConsulta=moduloConsultas.recibirRespuesta();
		
		Element nodos=rtaConsulta.getDocumentElement();
		
		NodeList entradas = nodos.getElementsByTagName("entrada");
		
		// recorrer entradas
		for(int i=0; i<entradas.getLength(); i++){
			
			NodeList campos = entradas.item(i).getChildNodes();
			
			String id=campos.item(0).getTextContent();
			String fecha=campos.item(1).getTextContent();
			
			mapeoSesiones.put(fecha,id);
		}
		
	}
	
	private Map<String,String> llenarMapeoTemas(String idSesion){
		mapeoTemas=new Hashtable<String,String>();
		MensajeConsulta consulta = new MensajeConsulta(MensajeConsulta.CONSULTA_TEMAS_DE_SESION);
		consulta.agregarParametro("idSesion", idSesion);
		
		moduloConsultas.enviarConsulta(consulta);
		Document rtaConsulta=moduloConsultas.recibirRespuesta();
		
		Element nodos=rtaConsulta.getDocumentElement();
		
		NodeList entradas = nodos.getElementsByTagName("entrada");
		
		// recorrer entradas
		for(int i=0; i<entradas.getLength(); i++){
			
			NodeList campos = entradas.item(i).getChildNodes();
			
			String id=campos.item(0).getTextContent();
			String tema=campos.item(1).getTextContent();
			
			mapeoTemas.put(tema,id);
		}
		return mapeoTemas;
		
	}
	
	//CUANDO SE SELECCIONA UNA SESION
	private void DesplegableSesionesActionPerformed(ActionEvent evt) {
		System.out.println("DesplegableSesiones.actionPerformed, event="+evt);
		//TODO add your code for DesplegableSesiones.actionPerformed
		
		System.out.println("..................1......... f f f ..............f f f ................");
		
		//aca lo que habria que hacer es actualizar el desplegable de temas
		//agregado eli............................
	
	
		PanelConsulta.remove(jComboBox1);
		String fecha_sesion=(String)DesplegableSesiones.getSelectedItem();
		String id_sesion = mapeoSesiones.get(fecha_sesion);
		mapeoTemas=llenarMapeoTemas(id_sesion);
		//.............................................
		
		ComboBoxModel jComboBox1Model = 
				//new DefaultComboBoxModel(	new String[] { "Item One", "Item Two" });
		
				new DefaultComboBoxModel(mapeoTemas.keySet().toArray());		
		jComboBox1 = new JComboBox();
		PanelConsulta.add(jComboBox1);
		jComboBox1.setModel(jComboBox1Model);
		jComboBox1.setBounds(251, 118, 139, 20);


		jComboBox1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				jComboBox1ActionPerformed(evt);
			}
		});
		System.out.println("..................2......... f f f ..............f f f ................");
		repaint();
		System.out.println("..................3......... f f f ..............f f f ................");
	}
	
	private void jComboBox1ActionPerformed(ActionEvent evt) {
		System.out.println("jComboBox1.actionPerformed, event="+evt);
		//TODO add your code for jComboBox1.actionPerformed
	}
	
	public void mostrarCierre(){ 
		estado2.setText("Se encontraron problemas en el servidor."); 
		PanelControl.remove(panel1); 
		repaint(); 
	}
	
	private boolean pedirPassUsr(){
		
		//boolean iniciarApp=false;
		
		JPasswordField campoPass = new JPasswordField();
		Object[] contenido = new Object[]{
				"Password:", campoPass,
		};
		
		int option = JOptionPane.showConfirmDialog(getContentPane(), contenido, "Login aplicaci�n", JOptionPane.OK_CANCEL_OPTION);  
		if (option == JOptionPane.OK_OPTION){
			char[] passIngresado = campoPass.getPassword();
			
			if(admin.verificarPass(passIngresado)){
				JOptionPane.showMessageDialog(getContentPane(), "logueado!!!");
				pass_usr=passIngresado;
				return true;
			}else{
				JOptionPane.showMessageDialog(getContentPane(), "Password incorrecto, la aplicaci�n se cerrar�");
				//dispose();
			}
			
			
		}else{
			JOptionPane.showMessageDialog(getContentPane(), "Debe ingresar un password. La aplicaci�n se cerrar�");
			//dispose();
		}
		return false;
	}
	
	private void RefreshActionPerformed(ActionEvent evt) {
		System.out.println("jComboBox1.actionPerformed, event="+evt);
		//TODO add your code for jComboBox1.actionPerformed
		
		
		llenarMapeoSesiones();
		
		//sesiones
		PanelConsulta.remove(DesplegableSesiones);
		
		ComboBoxModel DesplegableSesionesModel = 
				//new DefaultComboBoxModel(new String[] { "Item One", "Item Two" });
		new DefaultComboBoxModel(mapeoSesiones.keySet().toArray());
		DesplegableSesiones = new JComboBox();
		PanelConsulta.add(DesplegableSesiones);
		DesplegableSesiones.setModel(DesplegableSesionesModel);
		DesplegableSesiones.setBounds(251, 74, 139, 20);
		DesplegableSesiones.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				DesplegableSesionesActionPerformed(evt);
			}
		});
		
		
		//temas
		PanelConsulta.remove(jComboBox1);
		String fecha_sesion=(String)DesplegableSesiones.getSelectedItem();
		String id_sesion = mapeoSesiones.get(fecha_sesion);
		mapeoTemas=llenarMapeoTemas(id_sesion);
		//.............................................
		
		ComboBoxModel jComboBox1Model = 
				//new DefaultComboBoxModel(	new String[] { "Item One", "Item Two" });
		
				new DefaultComboBoxModel(mapeoTemas.keySet().toArray());		
		jComboBox1 = new JComboBox();
		PanelConsulta.add(jComboBox1);
		jComboBox1.setModel(jComboBox1Model);
		jComboBox1.setBounds(251, 118, 139, 20);


		jComboBox1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent evt) {
				jComboBox1ActionPerformed(evt);
			}
		});
	}

	

}
